DEFINITION MODULE  TRAPdefs;

(*****************************************************************************)
(* Hier sind alle Deklarationen enthalten, um Betriebssystemaufrufe ueber    *)
(* TRAPs abzusetzen. Da MODULA keine Prozeduren mit variablen Parametern ge- *)
(* stattet, mussten saemtliche bei Betriebssystemaufrufen vorkommende Kombi- *)
(* nationen von Wort- und Langwortparametern beruecksichtigt werden.         *)
(* Dies sind wirklich nur Deklarationen, keine Prozeduraufrufe! Wird eine    *)
(* solche 'Prozedur' im Quelltext mit aktuellen Parametern 'aufgerufen', so  *)
(* wird nur Code zum Ablegen der Parameter ( und der Funktionsnummer ) auf   *)
(* dem Stack und der Trap selbst an der Aufrufstelle erzeugt - kompakter     *)
(* gehts nicht.                                                              *)
(*                                                                           *)
(* Der Name einer Prozedur gibt Aufschluss ueber die Art und Reihenfolge der *)
(* Parameter: Angefangen vom ersten bis zum letzten Parameter wird die       *)
(* Groesse ( w ort  oder l angwort ) angegeben. Haben aufeinanderfolgende    *)
(* Parameter die gleiche Groesse, werden sie mit einem Zaehler vor dem       *)
(* Groessenbuchstaben zusammengefasst. In der Parameterliste ist die Reihen- *)
(* folge der Parameter wegen der Ablagekonvention des Compilers genau umge-  *)
(* kehrt: letzter Parameter zuerst, Funktionsnummer zuletzt.                 *)
(*                                                                           *)
(* Als Beispiel XBIOS2l1w in Assembler:                                      *)
(*                                                                           *)
(*             move.w  p3, -(sp)     * ein Wortparameter -> 1w               *)
(*                                   * zwei Langwortpar. -> 2l               *)
(*             move.l  p2, -(sp)     * oder  pea  p2                         *)
(*             move.l  p1, -(sp)     *    -"-     p1                         *)
(*             move.w  #fnkt, -(sp)                                          *)
(*             trap    #14                                                   *)
(*___________________________________________________________________________*)
(*  06-Mae-90 , Holger Kleinschmidt                                          *)
(*****************************************************************************)

FROM  SYSTEM  IMPORT  (* TYPE *) WORD;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)

CONST
      (* 68000-Register, a4 - a7 ( sp ) werden staendig
       * vom System benoetigt
       *)

       d0 = 0;     a0 =  8;
       d1 = 1;     a1 =  9;
       d2 = 2;     a2 = 10;
       d3 = 3;     a3 = 11;
       d4 = 4;     a4 = 12;
       d5 = 5;     a5 = 13;
       d6 = 6;     a6 = 14;
       d7 = 7;     sp = 15;

    (* Betriebssystem-TRAPs *)

CONST
       XBIOStrap  = 4E4EH;
       BIOStrap   = 4E4DH;
       GEMDOStrap = 4E41H;
       GEMtrap    = 4E42H;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)

  PROCEDURE  XBIOS0     ( fnkt         : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS1w    ( p1, fnkt     : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS2w    ( p2, p1, fnkt : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS6w    ( p6, p5, p4,
                          p3, p2, p1,
                          fnkt         : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS1l    ( p1           : LONGCARD;
                          fnkt         : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS3l    ( p3, p2, p1   : LONGCARD;
                          fnkt         : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS1w1l  ( p2           : LONGCARD;
                          p1, fnkt     : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS1w2l  ( p3, p2       : LONGCARD;
                          p1, fnkt     : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS3w1l  ( p4           : LONGCARD;
                          p3, p2, p1,
                          fnkt         : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS1l1w  ( p2           : WORD;
                          p1           : LONGCARD;
                          fnkt         : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS2l1w  ( p3           : WORD;
                          p2, p1       : LONGCARD;
                          fnkt         : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS2l2w  ( p4, p3       : WORD;
                          p2, p1       : LONGCARD;
                          fnkt         : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS2l5w  ( p7, p6,
                          p5, p4, p3   : WORD;
                          p2, p1       : LONGCARD;
                          fnkt         : WORD     ); CODE( XBIOStrap );

  PROCEDURE  XBIOS2l5w1l1w ( p9        : WORD;
                             p8        : LONGCARD;
                             p7, p6, p5,
                             p4, p3    : WORD;
                             p2, p1    : LONGCARD;
                             fnkt      : WORD     ); CODE( XBIOStrap );

  (*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)

  PROCEDURE  BIOS0      ( fnkt         : WORD     ); CODE( BIOStrap );

  PROCEDURE  BIOS1w     ( p1, fnkt     : WORD     ); CODE( BIOStrap );

  PROCEDURE  BIOS2w     ( p2, p1, fnkt : WORD     ); CODE( BIOStrap );

  PROCEDURE  BIOS1l     ( p1           : LONGCARD;
                          fnkt         : WORD     ); CODE( BIOStrap );

  PROCEDURE  BIOS1w1l   ( p2           : LONGCARD;
                          p1, fnkt     : WORD     ); CODE( BIOStrap );

  PROCEDURE  BIOS1w1l3w ( p5, p4, p3   : WORD;
                          p2           : LONGCARD;
                          p1, fnkt     : WORD     ); CODE( BIOStrap );

  (*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)

  PROCEDURE  GEMDOS0    ( fnkt         : WORD     ); CODE( GEMDOStrap );

  PROCEDURE  GEMDOS1w   ( p1, fnkt     : WORD     ); CODE( GEMDOStrap );

  PROCEDURE  GEMDOS2w   ( p2, p1, fnkt : WORD     ); CODE( GEMDOStrap );

  PROCEDURE  GEMDOS1l   ( p1           : LONGCARD;
                          fnkt         : WORD     ); CODE( GEMDOStrap );

  PROCEDURE  GEMDOS1w2l ( p3, p2       : LONGCARD;
                          p1, fnkt     : WORD     ); CODE( GEMDOStrap );

  PROCEDURE  GEMDOS1w3l ( p4, p3, p2   : LONGCARD;
                          p1, fnkt     : WORD     ); CODE( GEMDOStrap );

  PROCEDURE  GEMDOS1l1w ( p2           : WORD;
                          p1           : LONGCARD;
                          fnkt         : WORD     ); CODE( GEMDOStrap );

  PROCEDURE  GEMDOS1l2w ( p3, p2       : WORD;
                          p1           : LONGCARD;
                          fnkt         : WORD     ); CODE( GEMDOStrap );

  (*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)

  PROCEDURE  GEM0 ( ); CODE( GEMtrap );  (* Parameter in d0, d1 *)


END  TRAPdefs.
